﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ProjetDll;
using System.Diagnostics;

namespace Projet_lastfm
{
    public partial class FrmRechercheConcerts : Form
    {
        #region Champs

        private Artist selectedArtist = new Artist();
        Artist selectedArtistDetails = new Artist();
        Event selectedEvent = new Event();
        List<Event> lesEvents = new List<Event>();

        private const string MESSAGE_RECHERCHE_ARTISTE = "Recherche en cours, veuillez patienter ...";
        private const string MESSAGE_SAISIE_ARTISTE = "Veuillez saisir un artiste à rechercher";
        private const string MESSAGE_ARTISTE_INCONNU = "Désolé, l'artiste'#valeur#' est inconnu sur LastFM ...";

        private const string MESSAGE_RECHERCHE_VILLE = "Recherche en cours, veuillez patienter ...";
        private const string MESSAGE_SAISIE_VILLE = "Veuillez saisir une ville à rechercher";
        private const string MESSAGE_VILLE_INCONNUE = "Désolé, la ville '#valeur#' est inconnue sur LastFM ...";
        private const string lienMeteo = "http://www.meteorama.fr/m%C3%A9t%C3%A9o-#valeur#.html";

        private string message;

        #endregion

        #region Contructeur

        public FrmRechercheConcerts()
        {
            InitializeComponent();
        }

        #endregion

        private void btnRechercheArtiste_Click(object sender, EventArgs e)
        {
            if (txtRechercheArtiste.Text == string.Empty)
            {
                erp.SetError(txtRechercheArtiste, MESSAGE_SAISIE_ARTISTE);
            }
            else
            {
                Cursor.Current = Cursors.WaitCursor;
                lblErpMessageArtiste.Text = MESSAGE_RECHERCHE_ARTISTE;
                lblErpMessageArtiste.Refresh();

                rechercherParArtistes();

                txtRechercheArtiste.Clear();
            }
        }
        

        #region Méthodes

        private void rechercherParArtistes()
        {
            string recherche = txtRechercheArtiste.Text;
            List<Artist> lesArtists = LastFmApi.getAllArtistByName(recherche);
            lblErpMessageArtiste.Text = string.Empty;
            pnlInfos.Visible = true;
            if (lesArtists.Count == 0)
            {
                message = MESSAGE_ARTISTE_INCONNU.Replace("#valeur#",recherche);
                lblErpMessageArtiste.Text = message;
                erp.SetError(txtRechercheArtiste, message);
            }
            else
            {

                erp.SetError(txtRechercheArtiste, string.Empty);
                lstArtiste.DataSource = lesArtists;
                lstArtiste.DisplayMember = "name";
                txtRechercheArtiste.Text = string.Empty;

            }
        }

        private void rechercherParVille()
        {
            string rechercheVille = txtRechercheEvent.Text;
            List<Event> lesEvents = LastFmApi.getGeoEvents(rechercheVille);
            lblErpMessageArtiste.Text = string.Empty;
            pnlInfos.Visible = true;
            if (lesEvents.Count == 0)
            {
                message = MESSAGE_VILLE_INCONNUE.Replace("#valeur#", rechercheVille);
                lblErpMessageArtiste.Text = message;
                erp.SetError(txtRechercheEvent, message);
            }
            else
            {
                erp.SetError(txtRechercheEvent, string.Empty);
                lstEvent.DataSource = lesEvents;
                lstEvent.DisplayMember = "title";
                txtRechercheEvent.Text = string.Empty;
            }
        }


        #endregion

        private void FrmRechercheConcerts_Activated(object sender, EventArgs e)
        {
            txtRechercheArtiste.Focus();
        }

        private void lstArtiste_SelectedIndexChanged(object sender, EventArgs e)
        {
            selectedArtist = (Artist)lstArtiste.SelectedItem;
            
            lblNomArtiste.Text = selectedArtist.name;
            lklArtiste.Text = selectedArtist.link;
            lklArtiste.Tag = selectedArtist.link;
            picArtiste.ImageLocation = selectedArtist.picture;

            List<Event> lesEvents = LastFmApi.getAllEventByArtist(selectedArtist.name);
            lstEvent.DataSource = lesEvents;
            lstEvent.DisplayMember = "title";
        }

        private void btnRechercheEvent_Click(object sender, EventArgs e)
        {
            if (txtRechercheEvent.Text == string.Empty)
            {
                erp.SetError(txtRechercheEvent, MESSAGE_SAISIE_VILLE);
            }
            else
            {
                Cursor.Current = Cursors.WaitCursor;
                lblErpMessageArtiste.Text = MESSAGE_RECHERCHE_VILLE;
                lblErpMessageArtiste.Refresh();

                rechercherParVille();

                txtRechercheEvent.Clear();
            }
        }

        private void lstEvent_SelectedIndexChanged(object sender, EventArgs e)
        {
            selectedEvent = (Event)lstEvent.SelectedItem;

            lblEvent.Text = selectedEvent.title;
            lklEvent.Text = selectedEvent.link;
            picEvent.ImageLocation = selectedEvent.image;
            lblDateEvent.Text = selectedEvent.date;
            selectedEvent = (Event)lstEvent.SelectedItem;
            Localisation laLocalisationEvent = selectedEvent.venue.uneLocalisation;
            lkMeteo.Tag = lienMeteo.Replace("#valeur#", laLocalisationEvent.ville);
            lblPays.Text = laLocalisationEvent.pays;
            lblRue.Text = laLocalisationEvent.rue;
            lblCodePostal.Text = laLocalisationEvent.codePostal;
            lblLieu.Text = selectedEvent.venue.name;
            lblVille.Text = laLocalisationEvent.ville;
            lklLieu.Tag = selectedEvent.venue.link;
        }

        private void lkMeteo_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            Process.Start(lkMeteo.Tag.ToString());
        }

        private void lklLieu_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            Process.Start(lklLieu.Tag.ToString());
        }

        private void lklArtiste_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            Process.Start(lklArtiste.Tag.ToString());
        }

        


    }
}
